package com.yc.demo.d0303;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.File;
import java.io.IOException;

@WebServlet(name = "UploadServlet", value = "/UploadServlet")
//如果不加该注解, 无法处理文件上传请求
//报错java.lang.IllegalStateException: 由于没有提供multi-part配置，无法处理parts
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        //从请求中获取文件上传对象 Part,“file” 上传的文件提交的字段名称，不是文件名
        Part file = request.getPart("myfile");
        file.getContentType();   //文件类型 image ,html ,text
        file.getName();  //  字段名 file
        file.getSize();  //文件大小
        file.getSubmittedFileName();  //上传的文件名,Servlet3.1才有这个方法

        //file.write("D:\\study\\z\\d0303\\" + file.getSubmittedFileName());//保存文件

        //如何讲文件上传到 webapp 下
        //获取应用上下文对象  上下文  =》运行环境
        //jsp 中应用上下文对象 叫 application
        ServletContext application = request.getServletContext();
        //将 /upload (web路径) 转换为磁盘路径
        String  realPath = application.getRealPath("/uploads");
        System.out.println("realPath = " + realPath);

        //realPath 的目录不存在 ，那么创建文件夹
        new File(realPath).mkdirs();

        file.write(realPath + "/" + file.getSubmittedFileName()); //保存文件

        //src的地址怎么写,假设文件名a.jpg =>/uploads/a.jpg
        String webPath = "uploads/" +file.getSubmittedFileName();
        response.getWriter().println("文件上传成功 <br>");

        if (file.getContentType().contains("image")){
            response.getWriter().printf("<img src='%s' style='height:200px'>",webPath);
        }else {
            //普通文档直接提供下载,download = 默认下载后的保存的文件名 =>强制下载
            response.getWriter().printf("<a href='%s download='%s>%s</a>"
                    ,webPath
                    ,file.getSubmittedFileName()
                    ,file.getSubmittedFileName());
        }



        
    }
}
